

function layerFun() {
	return {
		/**  
		 * layer.msg() 显示一个不带图标的消息提示框。  
		 * @param {string} content - 要显示的消息内容。  
		 * @param {number} [time=3000] - 消息显示的持续时间，单位为毫秒，默认为 3000 毫秒。  
		 */
		msg: function (content : string, time : number = 3000) : void {
			// 参数验证
			if (typeof content !== 'string' || typeof time !== 'number' || time <= 0) {
				console.error('Invalid parameters for msg function.');
				return;
			}

			try {
				// 显示消息提示框  
				uni.showToast({
					icon: 'none',
					title: content,
					duration: time
				});
			} catch (error) {
				// 错误处理  
				console.error('An error occurred while showing the toast:', error);
			}
		},
		/**
		 * 自定义弹窗提示方法（修复TypeScript类型错误版）
		 * 基于uni-app的showModal封装，支持灵活配置和回调处理
		 * @param content - 弹窗显示的内容文本（必填）
		 * @param callbackOrOptions - 可选参数，可为回调函数或配置对象
		 *                            若为函数：用户点击确定后的回调
		 *                            若为对象：弹窗的配置选项（如title、showCancel等）
		 * @param callback - 可选参数，当第二个参数为配置对象时，此参数为确定按钮的回调
		 */
		alert: function (content : string, callbackOrOptions : ((res : any) => void) | object, callback ?: (res : any) => void) : void {
			let options : object = {};
			// 检查 callbackOrOptions 是否为函数，如果是，则调整参数顺序  
			if (typeof callbackOrOptions === 'function') {
				callback = callbackOrOptions;
			} else {
				options = callbackOrOptions || {}; // 否则，options 是第二个参数，或者默认为空对象  
			}

			// 合并默认配置和传入的配置  
			const finalOptions : {
				title : string;
				showCancel : boolean;
				confirmText : string;
				[key : string] : any;
			} = {
					title: (options as any).title || '提示', // 使用 options 中的 title，如果没有则默认值
					showCancel: (options as any).showCancel || false, // 默认不显示取消按钮  
					confirmText: (options as any).confirmText || '确定', // 默认确定按钮文本  
					...options // 展开操作符，将 options 中的属性合并到 finalOptions 中  
				};

			uni.showModal({
				title: finalOptions.title,
				content: content,
				showCancel: finalOptions.showCancel,
				confirmText: finalOptions.confirmText,
				maskClick: false,
				success: function (res) {
					if (res.confirm) {
						// 用户点击确定  
						if (typeof callback === 'function') {
							// 这里我们简单地传递一个字符串或对象给 callback，但在 layer.msg 的上下文中，  
							// 我们通常只传递一个简短的字符串。为了模拟这一点，我们可以传递 content 或其他自定义消息。  
							// 注意：uni-app 没有直接的 layer.msg 等价物，所以我们使用 uni.showToast 来模拟。  
							uni.showToast({
								title: '操作成功', // 这里您可以根据需要传递任何消息  
								icon: 'success',
								duration: 2000
							});
							// 但为了保持原函数的行为，我们还是调用 callback 并传递一些信息  
							callback({
								action: 'confirm',
								message: '用户点击确定'
							});
						}
					}
				}
			});
		},
		/**
		 * 自定义确认框方法，基于uni-app的showModal封装
		 * 支持确定/取消操作的回调处理，默认显示取消按钮（与alert的核心区别）
		 * @param content - 确认框显示的内容文本（必填）
		 * @param options - 第二个参数，可为回调函数或配置对象
		 *                  若为函数：综合回调（处理确定和取消操作）
		 *                  若为对象：确认框的配置选项（如标题、按钮文本等）
		 * @param callback - 可选参数，当第二个参数为配置对象时，此参数为综合回调函数
		 */
		confirm: function (content : string, options : ((res : any) => void) | object, callback ?: (res : any) => void) : void {
			// 检查 options 是否为函数，如果是，则调整参数顺序  
			if (typeof options === 'function') {
				callback = options;
				options = {}; // 设置 options 的默认值为空对象  
			} else {
				options = options || {}; // 否则，options 是第二个参数，或者默认为空对象  
			}

			// 合并默认配置和传入的配置  
			const finalOptions : {
				title : string;
				showCancel : boolean;
				cancelText : string;
				confirmText : string;
				[key : string] : any;
			} = {
					title: (options as any).title || '确认', // 设置 title 的默认值  
					showCancel: (options as any).showCancel !== undefined ? (options as any).showCancel : true, // 默认显示取消按钮  
					cancelText: (options as any).cancelText || '取消', // 默认取消按钮文本  
					confirmText: (options as any).confirmText || '确定', // 默认确定按钮文本 
					...options // 展开操作符，将 options 中的属性合并到 finalOptions 中  
				};

			// 使用 uni.showModal 显示模态框  
			uni.showModal({
				title: finalOptions.title,
				content: content,
				showCancel: finalOptions.showCancel,
				cancelText: finalOptions.cancelText,
				confirmText: finalOptions.confirmText,
				maskClick: false,
				// editable: true,
				success: function (res) {
					if (res.confirm) {
						// 用户点击确定  
						if (typeof callback === 'function') {
							// 调用回调函数，并传递一个对象表示用户的选择（这里可以根据需要调整）  
							callback({
								action: 'confirm'
							});
						}
					} else if (res.cancel) {
						// 用户点击取消（如果 showCancel 为 true）  
						if (typeof callback === 'function' && typeof (callback as any).cancel === 'function') {
							// 调用回调函数的 cancel 方法（如果提供了）  
							(callback as any).cancel({
								action: 'cancel'
							});
						} else if (typeof callback === 'function') {
							// 或者，如果没有提供单独的 cancel 方法，但提供了回调函数，可以在这里处理取消逻辑  
							callback({
								action: 'cancel'
							});
						}
					}
				}
			});
		},
		/**
		 * 自定义输入对话框方法，基于uni-app的showModal封装
		 * 提供带输入框的弹窗，支持获取用户输入内容并处理确认/取消操作
		 * @param options - 第二个参数，可为回调函数或配置对象
		 *                  若为函数：综合回调（处理确定和取消操作，包含输入值）
		 *                  若为对象：输入框的配置选项（如标题、按钮文本等）
		 * @param callback - 可选参数，当第二个参数为配置对象时，此参数为综合回调函数
		 */
		prompt: function (options : ((res : any) => void) | object, callback ?: (res : any) => void) : void {
			// 检查 options 是否为函数，如果是，则调整参数顺序
			if (typeof options === 'function') {
				callback = options;
				options = {}; // 设置 options 的默认值为空对象  
			} else {
				options = options || {}; // 否则，options 是第二个参数，或者默认为空对象  
			}

			// 合并默认配置和传入的配置
			const finalOptions : {
				title : string;
				showCancel : boolean;
				cancelText : string;
				confirmText : string;
				[key : string] : any;
			} = {
					title: (options as any).title || '确认', // 设置 title 的默认值
					showCancel: (options as any).showCancel !== undefined ? (options as any).showCancel : true, // 默认显示取消按钮  
					cancelText: (options as any).cancelText || '取消', // 默认取消按钮文本  
					confirmText: (options as any).confirmText || '确定', // 默认确定按钮文本  
					...options // 展开操作符，将 options 中的属性合并到 finalOptions 中  
				};

			// 使用 uni.showModal 显示模态框  
			uni.showModal({
				title: finalOptions.title,
				showCancel: finalOptions.showCancel,
				cancelText: finalOptions.cancelText,
				confirmText: finalOptions.confirmText,
				editable: true,
				success: function (res) {
					if (res.confirm) {
						// 输入框数据是必填，不填则一直显示
						if (res.content == '') {
							layerFun().prompt(options, callback);
						}
						// 用户点击确定  
						if (typeof callback === 'function') {
							console.log(res.content);
							// 调用回调函数，并传递一个对象表示用户的选择（这里可以根据需要调整）  
							callback({
								action: 'confirm',
								value: res.content
							});
						}
					} else if (res.cancel) {
						// 用户点击取消（如果 showCancel 为 true）  
						if (typeof callback === 'function' && typeof (callback as any).cancel === 'function') {
							// 调用回调函数的 cancel 方法（如果提供了）  
							(callback as any).cancel({
								action: 'cancel'
							});
						} else if (typeof callback === 'function') {
							// 或者，如果没有提供单独的 cancel 方法，但提供了回调函数，可以在这里处理取消逻辑  
							callback({
								action: 'cancel'
							});
						}
					}
				}
			});
		}
	};
}

// 假设 layer 已经定义
// function layer() {
// 	return layerFun();
// }

export default layerFun();